#ifndef CONFIGURATIONFACTORY_H_
#define CONFIGURATIONFACTORY_H_

#pragma once

#include "login_a.h"
#include "pin_a.h"
#include "deposit_a.h"
#include "withdraw_a.h"
#include "balance_a.h"
#include "prompt_for_pin_a.h"
#include "incorrect_id_msg_a.h"
#include "incorrect_pin_msg_a.h"
#include "too_many_attempts_msg_a.h"
#include "display_menu_a.h"
#include "deactivate_msg_a.h"
#include "make_withdraw_a.h"
#include "penalty_a.h"
#include "make_deposit_a.h"
#include "display_balance_a.h"
#include "below_min_balance_msg_a.h"
#include "activate_msg_a.h"
#include "inactive_account_msg_a.h"

using namespace std;

class ConfigurationFactory {
	
public:

	ConfigurationFactory();
	virtual ~ConfigurationFactory();
	
	virtual login_a* makeLogin() = 0;
	
	virtual pin_a* makePin() = 0;
	
	virtual deposit_a* makeDeposit() = 0;
	
	virtual withdraw_a* makeWithdraw() = 0;
	
	virtual balance_a* makeBalance() = 0;
	
	virtual prompt_for_pin_a* makePromptForPin() = 0;
	
	virtual incorrect_id_msg_a* makeIncorrectIdMsg() = 0;
	
	virtual incorrect_pin_msg_a* makeIncorrectPinMsg() = 0;
	
	virtual too_many_attempts_msg_a* makeTooManyAttemptsMsg() = 0;
	
	virtual display_menu_a* makeDisplayMenu() = 0;
	
	virtual deactivate_msg_a* makeDeactivateMsg() = 0;
	
	virtual make_withdraw_a* makeMakeWithdraw() = 0;
	
	virtual penalty_a* makePenalty() = 0;
	
	virtual make_deposit_a* makeMakeDeposit() = 0;
	
	virtual display_balance_a* makeDisplayBalance() = 0;
	
	virtual below_min_balance_msg_a* makeBelowMinBalance() = 0;
	
	virtual activate_msg_a* makeActivateMsg() = 0;
	
	virtual inactive_account_msg_a* makeInactiveAccountMsg() = 0;
	
};

#endif /*CONFIGURATIONFACTORY_H_*/
